home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / lisp / wgdb-42.lha / wgdb-4.2 / include / m88k-bcs.h < prev    next >
C/C++ Source or Header  |  1992-09-11  |  8KB  |  248 lines

  1. /*** coff information for 88k bcs */
  2.  
  3. /********************** FILE HEADER **********************/
  4. struct external_filehdr {
  5.     char f_magic[2];    /* magic number            */
  6.     char f_nscns[2];    /* number of sections        */
  7.     char f_timdat[4];    /* time & date stamp        */
  8.     char f_symptr[4];    /* file pointer to symtab    */
  9.     char f_nsyms[4];    /* number of symtab entries    */
  10.     char f_opthdr[2];    /* sizeof(optional hdr)        */
  11.     char f_flags[2];    /* flags            */
  12. };
  13.  
  14. #define MC88MAGIC  0540           /* 88k BCS executable */
  15. #define MC88DMAGIC 0541           /* DG/UX executable   */
  16. #define MC88OMAGIC 0555              /* Object file        */
  17.  
  18. #define MC88BADMAG(x) (((x).f_magic!=MC88MAGIC) &&((x).f_magic!=MC88DMAGIC) && ((x).f_magic != MC88OMAGIC))
  19.  
  20. #define    FILHDR    struct external_filehdr
  21. #define    FILHSZ    sizeof(FILHDR)
  22.  
  23.  
  24. /********************** AOUT "OPTIONAL HEADER" **********************/
  25.  
  26.  
  27. #define PAGEMAGIC3 0414 /* Split i&d, zero mapped */
  28. #define PAGEMAGICBCS 0413
  29.  
  30.  
  31. typedef struct 
  32. {
  33.   char     magic[2];        /* type of file                */
  34.   char    vstamp[2];        /* version stamp            */
  35.   char    tsize[4];        /* text size in bytes, padded to FW bdry*/
  36.   char    dsize[4];        /* initialized data "  "        */
  37.   char    bsize[4];        /* uninitialized data "   "        */
  38.   char    entry[4];        /* entry pt.                */
  39.   char     text_start[4];        /* base of text used for this file */
  40.   char     data_start[4];        /* base of data used for this file */
  41. }
  42. AOUTHDR;
  43.  
  44.  
  45. /* compute size of a header */
  46.  
  47. #define AOUTSZ (sizeof(AOUTHDR))
  48.  
  49. /********************** STORAGE CLASSES **********************/
  50.  
  51. #define C_EFCN        -1    /* physical end of function    */
  52. #define C_NULL        0
  53. #define C_AUTO        1    /* automatic variable        */
  54. #define C_EXT        2    /* external symbol        */
  55. #define C_STAT        3    /* static            */
  56. #define C_REG        4    /* register variable        */
  57. #define C_EXTDEF    5    /* external definition        */
  58. #define C_LABEL        6    /* label            */
  59. #define C_ULABEL    7    /* undefined label        */
  60. #define C_MOS        8    /* member of structure        */
  61. #define C_ARG        9    /* function argument        */
  62. #define C_STRTAG    10    /* structure tag        */
  63. #define C_MOU        11    /* member of union        */
  64. #define C_UNTAG        12    /* union tag            */
  65. #define C_TPDEF        13    /* type definition        */
  66. #define C_USTATIC    14    /* undefined static        */
  67. #define C_ENTAG        15    /* enumeration tag        */
  68. #define C_MOE        16    /* member of enumeration    */
  69. #define C_REGPARM    17    /* register parameter        */
  70. #define C_FIELD        18    /* bit field            */
  71. #define C_BLOCK        100    /* ".bb" or ".eb"        */
  72. #define C_FCN        101    /* ".bf" or ".ef"        */
  73. #define C_EOS        102    /* end of structure        */
  74. #define C_FILE        103    /* file name            */
  75. #define C_LINE        104    /* line # reformatted as symbol table entry */
  76. #define C_ALIAS         105    /* duplicate tag        */
  77. #define C_HIDDEN    106    /* ext symbol in dmert public lib */
  78. #define C_SHADOW        107     /* shadow symbol                */
  79. #define C_VERSION       108     /* coff version symbol          */
  80.  
  81.  
  82. /********************** SECTION HEADER **********************/
  83.  
  84.  
  85. struct external_scnhdr 
  86. {
  87.   char        s_name[8];    /* section name            */
  88.   char        s_paddr[4];    /* physical address, aliased s_nlib */
  89.   char        s_vaddr[4];    /* virtual address        */
  90.   char        s_size[4];    /* section size            */
  91.   char        s_scnptr[4];    /* file ptr to raw data for section */
  92.   char        s_relptr[4];    /* file ptr to relocation    */
  93.   char        s_lnnoptr[4];    /* file ptr to line numbers    */
  94.   char        s_nreloc[4];    /* number of relocation entries    */
  95.   char        s_nlnno[4];    /* number of line number entries*/
  96.   char        s_flags[4];    /* flags            */
  97. };
  98.  
  99.  
  100. #define    SCNHDR    struct external_scnhdr
  101. #define    SCNHSZ    sizeof(SCNHDR)
  102.  
  103. /*
  104.  * names of "special" sections
  105.  */
  106. #define _TEXT   ".text"
  107. #define _DATA   ".data"
  108. #define _BSS    ".bss"
  109.  
  110. /********************** LINE NUMBERS **********************/
  111.  
  112. /* 1 line number entry for every "breakpointable" source line in a section.
  113.  * Line numbers are grouped on a per function basis; first entry in a function
  114.  * grouping will have l_lnno = 0 and in place of physical address will be the
  115.  * symbol table index of the function name.
  116.  */
  117. struct external_lineno{
  118.     union {
  119.         char l_symndx[4];    /* function name symbol index, iff l_lnno == 0*/
  120.         char l_paddr[4];    /* (physical) address of line number    */
  121.     } l_addr;
  122.  
  123.     char l_lnno[4];
  124.  
  125. };
  126.  
  127. #define    LINENO    struct external_lineno
  128. #define    LINESZ    8
  129.  
  130.  
  131. /********************** SYMBOLS **********************/
  132.  
  133. #define E_SYMNMLEN    8    /* # characters in a symbol name    */
  134. #define E_FILNMLEN    14    /* # characters in a file name        */
  135. #define E_DIMNUM    4    /* # array dimensions in auxiliary entry */
  136.  
  137. struct external_syment 
  138. {
  139.   union {
  140.     char e_name[E_SYMNMLEN];
  141.     struct {
  142.       char e_zeroes[4];
  143.       char e_offset[4];
  144.     } e;
  145.   } e;
  146.   char e_value[4];
  147.   char e_scnum[2];
  148.   char e_type[2];
  149.   char e_sclass[1];
  150.   char e_numaux[1];
  151.   char pad2[2];
  152. };
  153.  
  154.  
  155.  
  156.  
  157. #define N_BTMASK    017
  158. #define N_TMASK        060
  159. #define N_BTSHFT    4
  160. #define N_TSHIFT    2
  161.  
  162.  
  163. /* Note that this isn't the same shape as other coffs */
  164. union external_auxent {
  165.   struct {
  166.     char x_tagndx[4];        /* str, un, or enum tag indx */
  167.     /* 4 */
  168.     union {
  169.       char x_fsize[4];        /* size of function */
  170.       struct {
  171.     char  x_lnno[4];    /* declaration line number */
  172.     char  x_size[4];    /* str/union/array size */
  173.       } x_lnsz;
  174.     } x_misc;
  175.     struct {            /* if ISFCN, tag, or .bb */
  176.       char x_lnnoptr[4];    /* ptr to fcn line # */
  177.       char x_endndx[4];        /* entry ndx past block end */
  178.     } x_fcn;
  179.     
  180.     /* 12 */
  181.     union {
  182.       struct {            /* if ISARY, up to 4 dimen. */
  183.     char x_dimen[E_DIMNUM][2];
  184.       } x_ary;
  185.     } x_fcnary;
  186.     /* 20 */
  187.     
  188.   } x_sym;
  189.   
  190.   union {
  191.     char x_fname[E_FILNMLEN];
  192.     struct {
  193.       char x_zeroes[4];
  194.       char x_offset[4];
  195.     } x_n;
  196.   } x_file;
  197.   
  198.   struct {
  199.     char x_scnlen[4];        /* section length */
  200.     char x_nreloc[4];        /* # relocation entries */
  201.     char x_nlinno[4];        /* # line numbers */
  202.   } x_scn;
  203.   
  204.   struct {
  205.     char x_tvfill[4];        /* tv fill value */
  206.     char x_tvlen[2];        /* length of .tv */
  207.     char x_tvran[2][2];        /* tv range */
  208.   } x_tv;            /* info about .tv section (in auxent of symbol .tv)) */
  209.  
  210. };
  211.  
  212. #define GET_FCN_LNNOPTR(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *)ext->x_sym.x_fcn.x_lnnoptr)
  213. #define GET_FCN_ENDNDX(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_fcn.x_endndx)
  214. #define PUT_FCN_LNNOPTR(abfd, in, ext)  bfd_h_put_32(abfd,  in, (bfd_byte *) ext->x_sym.x_fcn.x_lnnoptr)
  215. #define PUT_FCN_ENDNDX(abfd, in, ext) bfd_h_put_32(abfd, in, (bfd_byte *)   ext->x_sym.x_fcn.x_endndx)
  216. #define GET_LNSZ_SIZE(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_size)
  217. #define GET_LNSZ_LNNO(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_lnno)
  218. #define PUT_LNSZ_LNNO(abfd, in, ext) bfd_h_put_32(abfd, in, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_lnno)
  219. #define PUT_LNSZ_SIZE(abfd, in, ext) bfd_h_put_32(abfd, in, (bfd_byte *) ext->x_sym.x_misc.x_lnsz.x_size)
  220. #define GET_SCN_SCNLEN(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_scn.x_scnlen)
  221. #define GET_SCN_NRELOC(abfd, ext) bfd_h_get_32(abfd, (bfd_byte *) ext->x_scn.x_nreloc)
  222. #define GET_SCN_NLINNO(abfd, ext)  bfd_h_get_32(abfd, (bfd_byte *) ext->x_scn.x_nlinno)
  223. #define PUT_SCN_SCNLEN(abfd,in, ext) bfd_h_put_32(abfd, in, (bfd_byte *) ext->x_scn.x_scnlen)
  224. #define PUT_SCN_NRELOC(abfd,in, ext) bfd_h_put_32(abfd, in, (bfd_byte *)ext->x_scn.x_nreloc)
  225. #define PUT_SCN_NLINNO(abfd,in, ext)  bfd_h_put_32(abfd,in, (bfd_byte *) ext->x_scn.x_nlinno)
  226.  
  227. #define    SYMENT    struct external_syment
  228. #define    SYMESZ    20
  229. #define    AUXENT    union external_auxent
  230. #define    AUXESZ    20
  231.  
  232.  
  233. /********************** RELOCATION DIRECTIVES **********************/
  234.  
  235. struct external_reloc {
  236.   char r_vaddr[4];
  237.   char r_symndx[4];
  238.   char r_type[2];
  239.   char r_offset[2];
  240. };
  241.  
  242. #define RELOC struct external_reloc
  243. #define RELSZ  12
  244.  
  245. #define DEFAULT_SECTION_ALIGNMENT 8 /* double word */
  246.  
  247. #define NO_TVNDX
  248.